package sgeb;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 * @file Liga.java
 * @brief Clase Liga
 * @author Joaquín Ollero García
 * @date 21 de mayo del 2013
 * @version 0.1
 */
public class Liga {

    private int ligaID;
    private String nombre;
    private String categoria;
    private int nEquipos;

    public Liga() {
    }

    //@brief Constructor por defecto
    public Liga(int ligaID) {
	this.ligaID = ligaID;
    }

    //@brief Constructor con parametros
    public Liga(String nombre, String categoria, int nEquipos) {
	this.nombre = nombre;
	this.categoria = categoria;
	this.nEquipos = nEquipos;
    }

    public int GetId() {
	return this.ligaID;
    }

    public void SetId(int id) {
	this.ligaID = id;
    }
    // Métodos Get
    //@brief Devuelve el nombre de la liga

    public String GetNombre() {
	return this.nombre;
    }

    //@brief Devuelve la categoria de la liga
    public String GetCategoria() {
	return this.categoria;
    }

    //@brief Devuelve la clasificación de la liga
    public String[] GetClasificacion(int id_liga) {
	String[] equipos;
	try {
	    conectar cc = new conectar();
	    Connection cn = cc.conexion();
	    String sql = "select * from liga_equipo,equipo where liga_equipo.equipoID=equipo.equipoID and liga_equipo.ligaID='" + id_liga + "' ORDER BY equipo.partidosGanados DESC";
	    Statement stm = cn.createStatement();
	    ResultSet rs = stm.executeQuery(sql);
	    int n = 0;
	    //Contamos los equipos
	    while (rs.next()) {
		n++;
	    }
	    rs.first();

	    equipos = new String[n];

	    int i = 0;
	    do {
		if (n > 0) {
		    equipos[i] = rs.getString("equipo.nombre") + "            	       " + rs.getInt("equipo.partidosGanados") + "	                                          " + rs.getInt("equipo.partidosPerdidos");
		}
		i++;
	    } while (rs.next());
	    if (n > 0) {
		return equipos;
	    }
	    if (n > 0) {
		//JOptionPane.showMessageDialog(null, "Liga encontrada");
	    }
	} catch (SQLException ex) {
	    Logger.getLogger(Entrenador.class.getName()).log(Level.SEVERE, null, ex);
	}
	return null;
    }

    //@brief Devuelve los equipos de la liga
    public String[] GetEquipos(int id_liga) {
	String[] equipos;
	try {
	    conectar cc = new conectar();
	    Connection cn = cc.conexion();
	    String sql = "select * from liga_equipo,equipo where liga_equipo.equipoID=equipo.equipoID and liga_equipo.ligaID='" + id_liga + "'";
	    Statement stm = cn.createStatement();
	    ResultSet rs = stm.executeQuery(sql);
	    int n = 0;
	    //Contamos los equipos
	    while (rs.next()) {
		n++;
	    }
	    System.out.println(n);
	    rs.first();

	    equipos = new String[n];

	    int i = 0;
	    do {
		if (n > 0) {
		    equipos[i] = rs.getString("equipo.nombre");
		}
		i++;
	    } while (rs.next());
	    if (n > 0) {
		return equipos;
	    }
	    if (n > 0) {
		//JOptionPane.showMessageDialog(null, "Liga encontrada");
	    }
	} catch (SQLException ex) {
	    Logger.getLogger(Entrenador.class.getName()).log(Level.SEVERE, null, ex);
	}
	return null;
    }

    //@brief Devuelve el número de equipos de la liga
    public int getNEquipos() {
	return this.nEquipos;
    }

    // Métodos Set
    //@brief asigna el nombre de la liga
    public void SetNombre(String nombre) {
	this.nombre = nombre;
    }

    //@brief asigna la categoria de la liga
    public void SetCategoria(String categoria) {
	this.categoria = categoria;
    }

    //@brief asigna el número de equipos de la liga
    public void SetNEquipos(int nEquipos) {
	this.nEquipos = nEquipos;
    }

    // Otros métodos
    //@brief da de alta una liga
    public boolean altaLiga() {

	conectar cc = new conectar();
	Connection cn = cc.conexion();
	String sql = "INSERT INTO liga (nombre,categoria,nEquipos) VALUES (?,?,?)";

	try {
	    PreparedStatement pst = cn.prepareStatement(sql);
	    pst.setString(1, this.nombre);
	    pst.setString(2, this.categoria);
	    pst.setInt(3, this.nEquipos);

	    int n = pst.executeUpdate();
	    if (n > 0) {
		//JOptionPane.showMessageDialog(null, "Liga guardada");
		return true;
	    }
	} catch (SQLException ex) {
	    Logger.getLogger(Liga.class.getName()).log(Level.SEVERE, null, ex);
	}
	return false;

    }

    //@brief da de baja una liga
    public boolean bajaLiga(int ligaID) {

	conectar cc = new conectar();
	Connection cn = cc.conexion();
	String sql = "delete from liga where liga.ligaID='" + ligaID + "'";
	try {
	    PreparedStatement pst = cn.prepareStatement(sql);
	    pst.executeUpdate();
	    sql = "delete from liga_equipo where liga_equipo.ligaID='" + ligaID + "'";
	    pst = cn.prepareStatement(sql);
	    int n = pst.executeUpdate();
	    if (n > 0) {
		//JOptionPane.showMessageDialog(null, "Liga borrada");
		return true;
	    }
	} catch (SQLException ex) {
	    Logger.getLogger(Liga.class.getName()).log(Level.SEVERE, null, ex);
	}
	return false;
    }

    public boolean consultaLiga(String nombre) {
	try {
	    conectar cc = new conectar();
	    Connection cn = cc.conexion();
	    String sql = "select * from liga where liga.nombre = '" + nombre + "'";
	    Statement stm = cn.createStatement();
	    ResultSet rs = stm.executeQuery(sql);
	    int n = 0;
	    while (rs.next()) {
		n++;
		this.ligaID = rs.getInt("liga.ligaID");
		this.nombre = rs.getString("liga.nombre");
		this.categoria = rs.getString("liga.categoria");
		this.nEquipos = rs.getInt("liga.nEquipos");
	    }
	    if (n > 0) {
		//JOptionPane.showMessageDialog(null, "Liga encontrada");
		return true;
	    }
	} catch (SQLException ex) {
	    Logger.getLogger(Liga.class.getName()).log(Level.SEVERE, null, ex);
	}
	return false;
    }

    public boolean modificarLiga(int ligaID, String nombre, String categoria, int nEquipos) {
	conectar cc = new conectar();
	Connection cn = cc.conexion();
	String sql = "UPDATE liga SET nombre=?,categoria=?,nEquipos=? WHERE ligaID='" + ligaID + "'";
	try {
	    PreparedStatement pst = cn.prepareStatement(sql);
	    pst.setString(1, nombre);
	    pst.setString(2, categoria);
	    pst.setInt(3, nEquipos);
	    int n = pst.executeUpdate();
	    if (n > 0) {
		//JOptionPane.showMessageDialog(null, "Liga modificada ");
		return true;
	    }
	} catch (SQLException ex) {
	    Logger.getLogger(Liga.class.getName()).log(Level.SEVERE, null, ex);
	}
	return false;
    }

    // Otros métodos
    //@brief da de alta una liga
    public boolean altaEquipo(int equipoID) {

	conectar cc = new conectar();
	Connection cn = cc.conexion();

	try {
	    String sql = "delete from liga_equipo where liga_equipo.equipoID='" + equipoID + "'";
	    PreparedStatement pst = cn.prepareStatement(sql);
	    int n = pst.executeUpdate();
	    if (n > 0) {
		//JOptionPane.showMessageDialog(null, "Equipo borrado");
		return true;
	    }
	    
	    sql = "INSERT INTO liga_equipo (ligaID,equipoID) VALUES (?,?)";
	    pst = cn.prepareStatement(sql);
	    pst.setInt(1, this.ligaID);
	    pst.setInt(2, equipoID);
	    n = pst.executeUpdate();
	    
	    if (n > 0) {
		//JOptionPane.showMessageDialog(null, "Equipo añadido");
		return true;
	    }
	} catch (SQLException ex) {
	    Logger.getLogger(Liga.class.getName()).log(Level.SEVERE, null, ex);
	}
	return false;

    }

    public String[][] GetLigas(String categoria) {

	String[][] ligas = null;

	try {
	    conectar cc = new conectar();
	    Connection cn = cc.conexion();
	    String sql = "SELECT * FROM liga WHERE liga.categoria='" + categoria + "'";
	    Statement st = cn.createStatement();
	    ResultSet rs = st.executeQuery(sql);
	    int contador = 0;
	    int n = 0;
	    while (rs.next()) {
		contador++;
		n++;
	    }
	    rs.first();
	    ligas = new String[contador][2];
	    System.out.println(sql);
	    contador = 0;

	    do {
		if (n > 0) {
		    ligas[contador][0] = (rs.getString("liga.ligaID"));
		    ligas[contador][1] = (rs.getString("liga.nombre"));
		    contador++;
		}
	    } while (rs.next());
	} catch (SQLException ex) {
	    Logger.getLogger(Entrenador.class.getName()).log(Level.SEVERE, null, ex);
	}
	return ligas;
    }
}
